package br.com.jk.financeiro.contaBanco;

import br.com.jk.empresa.Empresa;
import br.com.jk.empresa.EmpresaRn;
import br.com.jk.financeiro.banco.Banco;
import br.com.jk.financeiro.banco.BancoRn;
import br.com.jk.util.ControllerException;
import br.com.jk.util.RNException;
import br.com.jk.util.pesquisa.Pesquisa;
import br.com.jk.util.pesquisa.Pesquisa.Tipo;
import br.com.jk.util.pesquisa.PesquisaJDialog;
import java.util.ArrayList;
import java.util.List;
import net.sf.jasperreports.engine.JRException;

/**
 *
 * @author camilo
 */
public class ContaBancoController {

  private ContaBanco banco;
  private int colunaSel;
  private int idEmpresa;
  public boolean modoConsulta;
  private Pesquisa pesquisa = new Pesquisa();

  public ContaBancoController() {
    this.banco = new ContaBanco();
  }

  /**
   * Verifica se todos os campos estão preenchidos, com excessão do campo jtfId
   *
   * @return
   */
  public boolean isNotNull() {
    /*if (dialog.getJtfCnpj().getText().isEmpty()) {
     Util.msgAdv("Campo \"CNPJ\" vazio.");
     dialog.getJtfCnpj().requestFocus();
     return false;
     } else if (dialog.getJtfIe().getText().isEmpty()) {
     Util.msgAdv("Campo \"IE\" vazio.");
     dialog.getJtfIe().requestFocus();
     return false;
     } else if (dialog.getJtfRazao().getText().isEmpty()) {
     Util.msgAdv("Campo \"Razão\" vazio.");
     dialog.getJtfRazao().requestFocus();
     return false;
     } else if (dialog.getJtfIdCidade().getText().isEmpty()) {
     Util.msgAdv("Campo \"Id Cidade\" vazio.");
     dialog.getJtfIdCidade().requestFocus();
     return false;
     } else if (dialog.getJtfCep().getText().isEmpty()) {
     Util.msgAdv("Campo \"CEP\" vazio.");
     dialog.getJtfCep().requestFocus();
     return false;
     } else if (dialog.getJtfRua().getText().isEmpty()) {
     Util.msgAdv("Campo \"Endereço\" vazio.");
     dialog.getJtfRua().requestFocus();
     return false;
     } else if (dialog.getJtfBairro().getText().isEmpty()) {
     Util.msgAdv("Campo \"Bairro\" vazio.");
     dialog.getJtfBairro().requestFocus();
     return false;
     } else if (dialog.getJtfNumero().getText().isEmpty()) {
     Util.msgAdv("Campo \"Nº\" vazio.");
     dialog.getJtfNumero().requestFocus();
     return false;
     } else if (dialog.getJtfFantasia().getText().isEmpty()) {
     Util.msgAdv("Campo \"Nome Fantasia\" vazio.");
     dialog.getJtfFantasia().requestFocus();
     return false;
     }*/
    return true;
  }

  public void salvar(ContaBanco produto) {
    if (produto != null) {
      ContaBancoRn produtoRn = new ContaBancoRn();
      //faz a conexão com o bd e salva os registros
      produtoRn.salvar(produto);
    }
  }

  public List<ContaBanco> listar() {
    ContaBancoRn prn = new ContaBancoRn();
    return prn.listar();
  }

  public void excluir(ContaBanco banco) {
    ContaBancoRn fornRn = new ContaBancoRn();
    fornRn.excluir(banco);
  }

  /**
   * Habilita a pesquisa somente para os campos configurados nesse método
   *
   * @param coluna Índice da coluna da qual se deseja efetuar a pesquisa
   * @return Se o campo estiver habilitado permite a pesquisa. O default é: false;
   */
  public boolean setEnabledPesquisa(int coluna) {
    colunaSel = coluna;
    switch (coluna) {
      case ContaBancoTableModel.COLUNA_COD_EMPRESA:
        pesquisa.setTipo(Pesquisa.Tipo.STRING);
        return true;
      case ContaBancoTableModel.COLUNA_COD_AGENCIA:
        pesquisa.setTipo(Pesquisa.Tipo.STRING);
        return true;
      case ContaBancoTableModel.COLUNA_COD_CONTA:
        pesquisa.setTipo(Pesquisa.Tipo.STRING);
        return true;
      case ContaBancoTableModel.COLUNA_COD_DESCRICAO:
        pesquisa.setTipo(Pesquisa.Tipo.STRING);
        return true;
      case ContaBancoTableModel.COLUNA_COD_BANCO:
        pesquisa.setTipo(Pesquisa.Tipo.STRING);
        return true;
      default:
        return false;
    }
  }

  public Pesquisa getCriterio(Tipo tipo) {
    return PesquisaJDialog.getCriterio(pesquisa.getTipo());
  }

  public List<ContaBanco> pesquisar() {
    List<ContaBanco> lstPesquisa = new ArrayList<>();
    Pesquisa pesq;
    if (modoConsulta) { //Se estiver habilitada a pesquisa executa o cod abaixo
      ContaBancoRn ctrn = new ContaBancoRn();

      //        Verifica qual é o tipo de campo e executa a consulta específica
      switch (colunaSel) {
        case ContaBancoTableModel.COLUNA_COD_EMPRESA:
          pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
          if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
            lstPesquisa = ctrn.pesquisaPadrao(ContaBanco.ATTRIBUTE_EMPRESA, pesq.getCriterio(), pesq.getOpcao());
          }
          break;
        case ContaBancoTableModel.COLUNA_COD_AGENCIA:
          pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
          if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
            lstPesquisa = ctrn.pesquisaPadrao(ContaBanco.ATTRIBUTE_AGENCIA, pesq.getCriterio(), pesq.getOpcao());
          }
          break;
        case ContaBancoTableModel.COLUNA_COD_CONTA:
          pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
          if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
            lstPesquisa = ctrn.pesquisaPadrao(ContaBanco.ATTRIBUTE_CONTA, pesq.getCriterio(), pesq.getOpcao());
          }
          break;
        case ContaBancoTableModel.COLUNA_COD_DESCRICAO:
          pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
          if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
            lstPesquisa = ctrn.pesquisaPadrao(ContaBanco.ATTRIBUTE_DESCRICAO, pesq.getCriterio(), pesq.getOpcao());
          }
          break;
        case ContaBancoTableModel.COLUNA_COD_BANCO:
          pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
          if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
            lstPesquisa = ctrn.pesquisaPadrao(ContaBanco.ATTRIBUTE_BANCO, pesq.getCriterio(), pesq.getOpcao());
          }
          break;
      }
    }
    return lstPesquisa;
  }

  public void report() throws JRException, Exception {
    ContaBancoReport mReport = new ContaBancoReport();
    mReport.geraRelatorio();
//    Master.setTextJlStatus("");
//    Master.setJpbStatusIndeterminate(false);
  }

  public ContaBanco getProduto() {
    return banco;
  }

  public void setProduto(ContaBanco produto) {
    this.banco = produto;
  }

  public boolean isModoConsulta() {
    return modoConsulta;
  }

  public void setModoConsulta(boolean modoConsulta) {
    this.modoConsulta = modoConsulta;
  }

  public Empresa carregaEmpresa(Integer id) throws ControllerException {
    try {
      EmpresaRn empresaRn = new EmpresaRn();
      Empresa emp = empresaRn.carregar(id);
      return emp;
    } catch (RNException e) {
      throw new ControllerException(e);
    }
  }

  public Banco carregaBanco(Integer id) {
    BancoRn bancoRn = new BancoRn();
    return bancoRn.carregar(id);
  }
}